#ifndef COOLPOOL_SIMULATION_COLLISIONHANDLER_H_
#define COOLPOOL_SIMULATION_COLLISIONHANDLER_H_

#include "Collision.h"
#include "SimObjectsExceptions.h"

namespace coolpool
{
	// Class for handling collisions between a pair of objects.
	class CollisionHandler
	{
	public:

		virtual ~CollisionHandler();

		virtual CollisionHandler * clone() const = 0;

		// Contains only one method to override trough which the collision detection engine
		// communicates with the objects. The differentiation between the types of objects must be part of this
		// method (trough entity->getType())
		virtual void handle(const Collision * collision)
			throw(UnexpectedInputException) = 0;

	protected:

		CollisionHandler();
		CollisionHandler(const CollisionHandler & collision_handler);
	};
}
#endif
